/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */



import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ImageIcon;

/**
 *
 * @author aluno
 */
public class Util {
    private static SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");

    /**
     * Verifica se um texto é composto por números.
     * @param text Texto a ser verificado.
     * @return True se texto é composto por números. False em caso contrário.
     */
    public static boolean isNumber(String text) {
        for (int i = 0; i < text.length(); i++) {
            if (!Character.isDigit(text.charAt(i))) {
                return false;
            }
        }
        return true;
    }

    /**
     * Verifica se um texto é composto por letras.
     * @param text Texto a ser verificado.
     * @return True se texto é composto por letras. False em caso contrário.
     */
    public static boolean isLetter(String text) {
        for (int i = 0; i < text.length(); i++) {
            if (!Character.isLetter(text.charAt(i))) {
                return false;
            }
        }
        return true;
    }

    /**
     * Verifica se um texto é composto por números ou letras.
     * @param text Texto a ser verificado.
     * @return True se texto é composto por números ou letras. False em caso contrário.
     */
    public static boolean isLetterOrNumber(String text) {
        for (int i = 0; i < text.length(); i++) {
            if (!Character.isLetterOrDigit(text.charAt(i))) {
                return false;
            }
        }
        return true;
    }

    /**
     * Remove e cria a base de dados no MySQL.
     * @param dataBase Nome da base de dados.
     * @param user Usuario do banco de dados.
     * @param password Senha do banco de dados.
     * @return True se base de dados foi criada. False em caso contrario.
     */
    public static boolean recreateDataBase(String dataBase, String user, String password) {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            String url = "jdbc:mysql://localhost";
            Connection connection = DriverManager.getConnection(url, user, password);
            Statement statement = connection.createStatement();
            statement.execute("DROP DATABASE IF EXISTS "+dataBase);
            statement.execute("CREATE DATABASE "+dataBase);
            statement.close();
            connection.close();
            return true;
        } catch (Exception ex) {
            Logger.getLogger(Util.class.getName()).log(Level.SEVERE, null, ex);
            return false;
        }
    }

    /**
     * Converte um array de bytes para um objeto ImageIcon.
     * @param imageData Array de bytes com os dados da imagem.
     * @return Objeto ImagemIcon com a imagem.
     */
    public static ImageIcon byteArrayToImageIcon(byte[] imageData) {
        ObjectInputStream objectInputStream = null;
        try {
            ByteArrayInputStream byteArray = new ByteArrayInputStream(imageData);
            objectInputStream = new ObjectInputStream(byteArray);
            return (ImageIcon)objectInputStream.readObject();

        } catch (Exception ex) {
            Logger.getLogger(Util.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                objectInputStream.close();
            } catch (IOException ex) {
                Logger.getLogger(Util.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return null;
    }

    /**
     * Converte um objeto ImageIcon para um array de bytes.
     * @param icon Objeto ImagemIcon com a imagem.
     * @return Array de bytes com os dados da imagem.
     */
    public static byte[] imageIconToByteArray(ImageIcon icon) {
        try {
            ByteArrayOutputStream byteArray = new ByteArrayOutputStream();
            ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArray);
            objectOutputStream.writeObject(icon);
            objectOutputStream.flush();
            return byteArray.toByteArray();
        } catch (IOException ex) {
            Logger.getLogger(Util.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }


    /**
     * Converte a data em objeto Date para texto String formato dd/mm/aaaa.
     * @param data Data em objeto Date.
     * @return Data em texto String formato dd/mm/aaaa.
     */
    public static String dateToString(Date data) {
        return dateFormat.format(data);
    }

    /**
     * Converte a data em texto String formato dd/mm/aaaa para objeto Date.
     * @param data Data em texto String formato dd/mm/aaaa
     * @return Data em objeto Date.
     */
    public static Date stringToDate(String data) {
        try {
            return dateFormat.parse(data);
        } catch (ParseException ex) {
            Logger.getLogger(Util.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }

}
